// 配置axios
import axios from "axios";
// 引入elementui的弹框
import { MessageBox,Message,Loading } from "element-ui";
// 引入storage方法
import storage from "@/utils/storage";
// 引入进度条
import nprogress from "nprogress";
import 'nprogress/nprogress.css';
let http = axios.create({
    baseURL:"/api",
    timeout:15000,  //超时设置
    withCredentials:true,  //配置本地凭据，比如cookie
})

// 全局的请求拦截器 ，对接口的请求批量进行统一的处理
let fullScreenLoading = null

http.interceptors.request.use(config=>{
    nprogress.start()
    // 先获取本地的token，然后携带给后端
    let token=storage.get('qf-token')
    config.headers['authorization']=token

    // 登入的时候打开加载动画

    // 关键字 login wechatLogin
    if(config.url.indexOf('login') !== -1 || config.url.indexOf('wechatLogin') !== -1){

        fullScreenLoading =  Loading.service({
                    lock: true,
                    text: 'Loading',
                    spinner: 'el-icon-loading',
                    background: 'rgba(0, 0, 0, 0.7)'
        })
    }
   

    return config  //放行 不return 那么不能将请求真正的发送出去
})

// 全局响应拦截 统一对错误进行处理
http.interceptors.response.use(config=>{
    nprogress.done()
    if(fullScreenLoading){
        fullScreenLoading.close()
        fullScreenLoading = null
    }
    let {state,msg} = config.data
    if(!state && config.config.url !== "/order/query_order_status"){
        MessageBox({
            message:msg,
            title:'提示',
            type:'error'
        })
    }
    // 10022 1004 这两个状态码分别对应了token过期和session过期
    // 10026 没有权限
    // 清掉本地缓存 清掉token
    let {code} = config.data
    if(code === "10022" || code === "1004"){
        Message.error('登入过期,请重新登入')
        storage.rm('qf-token')
        location.reload()
    }
    return config //如果不retrun axios请求就拿不到响应结果
})

export default http;

